// https://goofychris.github.io/art-template/zh-cn/docs/index.html
import template from "art-template"
import {dayjs} from "element-plus"
import _ from "lodash"
import store, {typeMappingToColor, typeMappingToCustom} from "@/utils/store.js";

// 转驼峰
export function camel(str) {
  return str?.replace(/_(\w)/g, (_, p1) => p1.toUpperCase())
}

// 帕斯卡命名（大驼峰）
export function pascal(str) {
  const newStr = camel(str)
  return newStr ? newStr.charAt(0).toUpperCase() + newStr.slice(1) : newStr;
}

// 下划线
export function snake(str) {
  return str?.replace(/([A-Z])/g, '_$1').toLowerCase();
}

// varchar(20) ==> VARCHAR
export function simpleType(srcType) {
  return srcType?.split('(')[0];
}

export function typeMapping(srcType, lang, saveVarcharLength = false) {
  if (saveVarcharLength) {
    const arr = srcType.split('(')
    if (arr.length == 2) {
      return typeMappingToCustom.value.get((arr[0] + '-' + lang).toUpperCase()) + '(' + arr[1]
    } else {
      return typeMappingToCustom.value.get((srcType+ '-' + lang).toUpperCase())
    }
  } else {
    const type = simpleType(srcType)
    return typeMappingToCustom.value.get((type + '-' + lang).toUpperCase())
  }
}

export function colorMapping(srcType) {
  const langColor = colorMappingLanguage(srcType)
  if (langColor) return langColor

  const type = simpleType(srcType)
  return typeMappingToColor.value.get(type?.toUpperCase())
}

function colorMappingLanguage(lang) {
  const lower = lang?.toLowerCase()
  if (lower === 'javascript' || lower === 'js') return '#409eff'
  if (lower === 'java') return '#67c23a'
  if (lower === 'go') return '#e6a23c'
  if (lower === 'rust') return '#909399'
  return null
}


// 数据库和语言的名称转为列类型
export function extCols(targets, type='input') {
  return targets.map(item => {
    const c = {}
    c.type = type
    c.label = item
    c.prop = item
    c.icon = item
    c.width = 120
    return c
  })
}

// region template模板配置
// 模板语法规则列表
// template.defaults.rules=['artRule']
// 启动模板引擎调试模式。如果为 true: {cache:false, minimize:false, compileDebug:true}
template.defaults.debug=true
// 是否开启对模板输出语句自动编码功能。为 false 则关闭编码输出功能
// escape 可以防范 XSS 攻击
template.defaults.escape=false
// 全部变量设置
template.defaults.imports.log = console.log
template.defaults.imports.dayjs = dayjs
template.defaults.imports._ = _
template.defaults.imports.camel = camel
template.defaults.imports.snake = snake
template.defaults.imports.pascal = pascal
template.defaults.imports.typeMapping = typeMapping

// endregion
export function renderTemplate(source, data) {
  const src = '/* metaman {{dayjs().format(\'YYYY-MM-DD HH:mm:ss\')}}*/\n' + source
  try {
    return template.render(src, data)
  } catch (e) {
    return e.message
  }
}

// // 渲染数据库
// export function renderDatabase(database, code, data) {
//   const template = store.templateDatabaseData.filter(d => d.code === code)[0][database]
//   return renderTemplate(template, data)
// }
//
// // 渲染编程语言
// export function renderLang(language, code, data) {
//   const template = store.templateLanguageData.filter(d => d.code === code)[0][language]
//   return renderTemplate(template, data)
// }


